import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#-------设置支持中文----------------------#
import matplotlib as mpl
# 设置黑体字
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
#-------自定义坐标刻度格式----------------#
from matplotlib.ticker import FuncFormatter
np.random.seed(0)
data = pd.DataFrame(np.random.randint(20, 300, (4, 16)), 
                    index=['0~0.2', '0.3~1.5', '1.6~3.3', '3.4~5.4'],
                    columns='N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW'.split())
_sum = data.apply(np.sum)
data = data / _sum
data
#风速分布为16个方向
N = 16
#获取16个方向的角度值
theta = np.linspace(0, 2*np.pi, N, endpoint=False)
#绘制扇形的宽度可以自行调整
width = np.pi / N 
#自定义坐标轴标签
labels = list(data.columns)
# 开始画圆
plt.figure(figsize=(8,8))
ax = plt.subplot(111, projection='polar')
for idx in data.index:
    #每一行绘制一个扇形
    radii = data.loc[idx]
    ax.bar(theta, radii, width=width, bottom=0.0, label=idx, tick_label=labels)
#------------------------------------#
ax.set_theta_zero_location('N') #设置零度方向北
ax.set_theta_direction(-1)    # 逆时针方向
#--------自定义yaxis的刻度格式-----------#
plt.gca().yaxis.set_major_formatter(FuncFormatter(lambda s, position: '{:.0f}%'.format(100*s)))
plt.title('风玫瑰图示意图')
#将label放在图外，调整位置
plt.legend(loc=4, bbox_to_anchor=(1.15, -0.07))
plt.savefig('d:/plot6.4.png',dpi=600)
plt.show()